GtkCalendar: deal better with a large allocation
authorMatthias Clasen <mclasen@redhat.com>
Thu, 2 Oct 2014 00:09:10 +0000 (20:09 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 2 Oct 2014 00:09:10 +0000 (20:09 -0400)
When allocated more than the requested height, GtkCalendar
was 'falling apart'. Not only was the main part rendered
at the far end of the allocation, clicking on days was
broken in this scenario.

Fix this by always placing the main part directly under
the header and day names.

https://bugzilla.gnome.org/show_bug.cgi?id=737670

gtk/gtkcalendar.c

index 377a5e9144383f2c6bcb66d88e494942fff13658..47f1e8bca99f26881589af8fb6bf7fdca7a71b95 100644 (file)
@@ -1253,17 +1253,14 @@ static gint
 calendar_top_y_for_row (GtkCalendar *calendar,
                         gint         row)
 {
-  GtkAllocation allocation;
-  gint inner_border = calendar_get_inner_border (calendar);
+  GtkCalendarPrivate *priv = calendar->priv;
   GtkBorder padding;
+  gint inner_border = calendar_get_inner_border (calendar);
 
-  gtk_widget_get_allocation (GTK_WIDGET (calendar), &allocation);
   get_component_paddings (calendar, &padding, NULL, NULL, NULL);
 
-  return  allocation.height
-          - padding.top - inner_border
-          - (CALENDAR_MARGIN + (6 - row)
-             * calendar_row_height (calendar));
+  return priv->header_h + priv->day_name_h + padding.top + inner_border
+         + row * calendar_row_height (calendar);
 }
 
 /* row_from_y: returns the row 0-5 that the